import { like } from '@/api/consult'
import { ref, type Ref } from 'vue'
import { getPrescriptionImg, cancelConsultOrder, delConsultOrder } from '@/api/consult'
import { showImagePreview, showToast, type FormInstance } from 'vant'
import { OrderType } from '@/enums'
import type { ConsultOrderItem } from '@/types/consult'
// import type { FormInstance } from 'vant'
import { getCode } from '@/api/user'
import type { CodeType } from '@/types/user'

/**
 * 导出那些公共的hook
 * 这些函数以use开头
 */
/**
 * 关注的公共逻辑
 * @param type 类型
 */
export const useFollow = (type: 'topic' | 'knowledge' | 'doc' | 'disease') => {
  // 到底返回什么出去？
  const loading = ref(false)
  const likeOrNotLike = async (item: { id: string; likeFlag: number }) => {
    loading.value = true
    // 发请求
    await like({
      id: item.id,
      type
    })
    loading.value = false
    // 更改状态
    item.likeFlag = item.likeFlag === 1 ? 0 : 1
  }

  // 最终别人调用我，我返回的是一个对象（对象里面有两个属性）
  return {
    loading,
    likeOrNotLike
  }
}

/**
 * 查看处方
 */
export const useShowPrescription = () => {
  const previewPre = async (id: string) => {
    const res = await getPrescriptionImg(id)

    showImagePreview([res.data.url])
  }

  return {
    previewPre
  }
}

/**
 * 取消订单
 */
export const useCancelConsult = () => {
  // 取消订单
  const cancel = async (item: ConsultOrderItem) => {
    await cancelConsultOrder(item.id)

    showToast('取消成功~')

    // 更新状态为取消
    item.status = OrderType.ConsultCancel
    item.statusValue = '已取消'
  }

  return {
    cancel
  }
}

/**
 * 删除订单
 */
export const useDelConsult = (callback?: () => void) => {
  const del = async (id: string) => {
    await delConsultOrder(id)

    // 删除之后的后续处理
    // 分情况，如果是在 consult-item 中则是子传父，让父组件删掉数据，
    // 如果是在 consult-detail 中，则路由返回到consult-page

    /** 
     * 以下写法不推荐
    if (如果是在consult-item) {

    } else if (如果是在 consult-detail 中) {

    }
    */

    // 调用就相当于在执行逻辑
    callback && callback()
  }

  return {
    del
  }
}

// 抽取获取验证码的hook
export const useCode = (mobile: Ref<string>, type: CodeType = 'login') => {
  // 倒计时相关
  const time = ref(0)
  let timer = -1
  const form = ref<FormInstance>()

  const send = async () => {
    try {
      if (time.value > 0) return

      // 验证手机号
      await form.value?.validate(['mobile'])
      // 发请求，获取绑定手机号的验证码
      const res = await getCode(mobile.value, type)
      showToast(res.data.code)

      // 开始倒计时
      time.value = 60
      clearInterval(timer)
      timer = window.setInterval(() => {
        time.value--
        if (time.value <= 1) {
          clearInterval(timer)
          time.value = 0
        }
      }, 1000)
    } catch (error) {
      console.log('---error---', error)
    }
  }

  return {
    timer,
    time,
    send,
    form
  }
}
